package com.ict.util;


import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

/**
 * @author wujinpeng
 * @version 1.0
 * @date 2025/2/2 16:49
 * @description 代码生成器
 */
public class CodeGenerator {
    public static void main(String[] args) {
        // 1. 创建代码生成器
        AutoGenerator generator = new AutoGenerator();

        // 2. 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); // 输出目录
        globalConfig.setAuthor("wjp"); // 作者
        globalConfig.setOpen(false); // 生成后是否打开文件夹
        globalConfig.setFileOverride(true); // 是否覆盖已有文件
        globalConfig.setServiceName("%sService"); // 服务接口命名规则
        generator.setGlobalConfig(globalConfig);


        // 3. 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ict-unmaned-supermarket?useSSL=false&serverTimezone=UTC");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        generator.setDataSource(dataSourceConfig);

        // 4. 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo"); // 父包名
        packageConfig.setEntity("entity"); // 实体类包名
        packageConfig.setMapper("mapper"); // Mapper 接口包名
        packageConfig.setService("service"); // Service 包名
        packageConfig.setController("controller"); // Controller 包名
        generator.setPackageInfo(packageConfig);
//        ict_user ict_cart_item ict_order ict_order_item ict_product ict_product_category ict_role ict_sku_stock
        // 5. 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 表名转驼峰命名
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 列名转驼峰命名
        strategyConfig.setEntityLombokModel(true); // 使用 Lombok
        strategyConfig.setRestControllerStyle(true); // 生成 @RestController
        strategyConfig.setInclude("ict_user", "ict_cart_item", "ict_order",
                                "ict_order_item","ict_product","ict_product_category",
                                "ict_role", "ict_sku_stock"); // 需要生成的表名
        strategyConfig.setControllerMappingHyphenStyle(true); // URL 中使用连字符
        generator.setStrategy(strategyConfig);

        // 6. 模板引擎配置
        generator.setTemplateEngine(new VelocityTemplateEngine());

        // 7. 执行生成
        generator.execute();

    }
}